#pragma once

//	Forwarded references
class CPdbTranslationMaps;
class CPdbModuleDetails;
class CPdbFile;

class CPdbModule : public IPdbModule 
{
public:
	CPdbModule(CPdbFile*, IDiaSymbol*);
	virtual ~CPdbModule();
	
	const std::wstring& GetName();
	DWORD GetTypeId();
	bool Reject();

	std::vector<IPdbModule*>& GetModules(PdbSymbolType);
	IPdbModuleDetails* GetModuleDetails();
	std::vector<IPdbSourceFile*>& GetSourceFiles();

	//	Accessor
	IDiaSymbol* GetDiaSymbol() const { return m_pIDiaSymbol; }
	
	//	Internal Symbol Data collection
	wstring GetCompilerName();
	wstring GetBackEndBuildNumber();
	bool GetManagedCode();

private:
	CPdbFile* m_pPdbFile;
	IDiaSymbol* m_pIDiaSymbol;
	wstring m_sSymbolName;

	TCHAR m_buffer[64];

	//	Collection of dhildren Modules of this module
	std::vector<IPdbModule*> m_vectorModules;
	CPdbModuleDetails* m_pPdbCompilandDetails;

	//	Collection fo Sources of this module
	std::vector<IPdbSourceFile*> m_vectorSources;
};